﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplicationGDI2._1
{
    public partial class Form1 : Form
    {
        HatchStyle hs;        

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics grp = e.Graphics;

            Pen p = new Pen(Color.DimGray);

            float[] dv = { 5, 2, 5, 2 };
            p.Width = 3;
            p.DashPattern = dv;
            grp.DrawLine(p, new Point(180, 250), new Point(310, 300));  // низ линия основная
            grp.DrawLine(p, new Point(310, 300), new Point(430, 150));  // Правая основная
            grp.DrawLine(p, new Point(430, 150), new Point(300, 100));  // верхняя основная
            grp.DrawLine(p, new Point(180, 250), new Point(300, 100));  // левая основная
            grp.DrawLine(p, new Point(343, 260), new Point(430, 300));  // нижняя правая дополнительная
            grp.DrawLine(p, new Point(395, 198), new Point(482, 238));  // нижняя левая дополнительная
            grp.DrawLine(p, new Point(364, 125), new Point(425, 45));  // верхняя доп линия
            grp.DrawLine(p, new Point(394, 88), new Point(350, 70));  // верхняя отходящая от доп линии
            grp.DrawLine(p, new Point(210, 263), new Point(160, 330));  // нижняя доп линия
            grp.DrawLine(p, new Point(170, 316), new Point(120, 296));  // нижняя отходящая от доп линии
            grp.DrawLine(p, new Point(210, 210), new Point(150, 186));  // левая нижняя доп линия
            grp.DrawLine(p, new Point(250, 160), new Point(200, 136));  // левая верхняя доп линия
            grp.DrawLine(p, new Point(210, 140), new Point(190, 166));  // левая отходящая от верхней доп линии
            grp.DrawLine(p, new Point(180, 200), new Point(207, 164));  // левая отходящая от нижней доп линии
            grp.DrawLine(p, new Point(180, 156), new Point(220, 175));  // пересекающая между левыми отходящими от доп

            // рисуем лесной массив в центре
            //Brush b = new HatchBrush(hs, Color.Silver, Color.Green);
            //int x = 289, y = 131;
            p.Width = 70;
            //grp.DrawLine(p,  new Point(260, 250), new Point(350, 150));
            Point[] pArr = new Point[5];
            float[] v = {1};
            p.DashPattern = v;

            Point[] fillLine = new Point[5];
            fillLine[0] = new Point(310, 117);
            fillLine[1] = new Point(396, 154);
            fillLine[2] = new Point(312, 259);
            fillLine[3] = new Point(225, 224);
            fillLine[4] = new Point(309, 110);

            pArr[0] = new Point(300, 150);
            pArr[1] = new Point(340, 167);
            pArr[2] = new Point(300, 217);
            pArr[3] = new Point(280, 209);
            pArr[4] = new Point(338, 137);

            grp.DrawLines(p, pArr);
            Brush b = new HatchBrush(/*HatchStyle.Shingle*/hs, Color.Gold, Color.Green);
            
            grp.FillClosedCurve(b, fillLine);
            grp.Dispose();

        }

        private void Form1_Click(object sender, EventArgs e)
        {
            textBox1.Text = ((e as MouseEventArgs).X + " " + (e as MouseEventArgs).Y);
        }

        void en_onChanged(WindowsFormsApplicationGDI2._1.Enumeration.Enumer sender, object value)
        {
            
            hs = (HatchStyle)value; // полю нашего класса присваиваем пришедшее значение
            
            Invalidate();   // и перерисовываем
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            WindowsFormsApplicationGDI2._1.Enumeration.Enumer en = new WindowsFormsApplicationGDI2._1.Enumeration.Enumer(
                typeof(HatchStyle), this);

            en.onChanged += en_onChanged;
        }
    }
}

/*
 * Нарисовать схему проезда.
 * Градиентный прямоугольник, со сторокой.
 * заборы или реки - реализовать с помощью хатчбраш.
 * дорогу  - дашпатерн.
 * текстурной кистью - что-ьто отметить. 
 * лесной массив с помощью ратчградбраш
*/